package cn.iocoder.yudao.module.famous.doctor.service.FamNotice;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.famous.doctor.controller.admin.FamNotice.vo.*;
import cn.iocoder.yudao.module.famous.doctor.controller.app.famNoticeClose.vo.AppFamNoticeCloseBaseVO;
import cn.iocoder.yudao.module.famous.doctor.dal.dataobject.FamNotice.FamNoticeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 公告 Service 接口
 *
 * @author 档案
 */
public interface FamNoticeService {

    /**
     * 创建公告
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createFamNotice(@Valid FamNoticeCreateReqVO createReqVO);

    /**
     * 更新公告
     *
     * @param updateReqVO 更新信息
     */
    void updateFamNotice(@Valid FamNoticeUpdateReqVO updateReqVO);

    /**
     * 删除公告
     *
     * @param id 编号
     */
    void deleteFamNotice(Long id);

    /**
     * 获得公告
     *
     * @param id 编号
     * @return 公告
     */
    FamNoticeDO getFamNotice(Long id);

    /**
     * 通过客户端类型获取最新一条公告
     *
     * @param clientType 客户端类型
     * @return 公告
     */
    FamNoticeDO getFamNoticeByClientType(Byte clientType,Long userId);

    void closeNotice(AppFamNoticeCloseBaseVO appFamNoticeCloseBaseVO);

    /**
     * 获得公告列表
     *
     * @param ids 编号
     * @return 公告列表
     */
    List<FamNoticeDO> getFamNoticeList(Collection<Long> ids);

    /**
     * 获得公告分页
     *
     * @param pageReqVO 分页查询
     * @return 公告分页
     */
    PageResult<FamNoticeDO> getFamNoticePage(FamNoticePageReqVO pageReqVO);

    /**
     * 获得公告列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 公告列表
     */
    List<FamNoticeDO> getFamNoticeList(FamNoticeExportReqVO exportReqVO);

}
